#ifndef ___fat32_procesar_sectores_de_mensajes

#define ___fat32_procesar_sectores_de_mensajes 1

#include "f32_bloq.c"
#include "f32_cchi.c"
#include "f32_le_1.c"

void fat32_procesar_datos_sector_entrantes(unsigned long, void *);
void fat32_procesar_escritura_sector_entrante(unsigned long);

void fat32_procesar_datos_sector_entrantes (unsigned long numeroSector, void * datos) {
  unsigned int posicion;
  unsigned long bloque;
  unsigned char valor;
  unsigned short offset;
  bloque = numeroSector & ~3L;
  valor = 1 << (numeroSector & 3);
  offset = (numeroSector & 3) * 512;
  for (posicion = 0; posicion < fat32_cantidad_bloqueos; posicion ++) {
    if (fat32_bloqueos[posicion].tipoEvento != 1) continue;
    if (fat32_bloqueos[posicion].datosEvento.lectura.sector != bloque) continue;
    fat32_bloqueos[posicion].datosEvento.lectura.estado |= valor;
    memcpy(((char *) (fat32_bloqueos[posicion].datosEvento.lectura.buffer)) + offset, datos, 512);
    if (fat32_bloqueos[posicion].datosEvento.lectura.estado == 15) {
      fat32_insertar_operacion_terminada(fat32_bloqueos[posicion].transaccionBloqueada, bloque, 0);
      fat32_agregar_bloque_a_cache(bloque, fat32_bloqueos[posicion].datosEvento.lectura.buffer);
    }
  }
}

void fat32_procesar_escritura_sector_entrante (unsigned long numeroSector) {
  unsigned int posicion;
  unsigned long bloque;
  unsigned char valor;
  unsigned short offset;
  bloque = numeroSector & ~3L;
  valor = 1 << (numeroSector & 3);
  offset = (numeroSector & 3) * 512;
  for (posicion = 0; posicion < fat32_cantidad_bloqueos; posicion ++) {
    if (fat32_bloqueos[posicion].tipoEvento != 2) continue;
    if (fat32_bloqueos[posicion].datosEvento.lectura.sector != bloque) continue;
    fat32_bloqueos[posicion].datosEvento.lectura.estado |= valor;
    if (fat32_bloqueos[posicion].datosEvento.lectura.estado == 15)
      fat32_insertar_operacion_terminada(fat32_bloqueos[posicion].transaccionBloqueada, bloque, 1);
  }
}

#endif